USB is an industry standard that was designed to standardize connecting computer peripherals, such as printers, keyboards, and mass storage devices, to a computer. Because of their convenience and ease of use, USB devices may be used to facilitate transporting data from one computer to another without needing the support of a communications network, and without the devices requiring extensive technical configuration. A USB device, in general, may be accessed simply by plugging the USB device into a USB port on a computer. Despite the convenience, however, a USB device has disadvantages that may cause it to spontaneously disconnect and reconnect at the computer. For example, this may occur when a voltage fluctuation is detected at the host controller port, or if power to the USB hub containing the USB device is momentarily lost. Additionally, a computer user may accidentally remove a USB device, for example, a USB mass storage device such as a disk drive; from the computer without properly quiescing any active data transfer operations. In these examples, active Input/Output (I/O) operations will be interrupted when the USB device is disconnected. Even if the USB device is reconnected within a few milliseconds, the outstanding I/Os will be discarded and a permanent failure will be returned to the executing program, which then must logically reopen the USB device and restart the data transfer. An application accessing the data may function incorrectly as a result of data that may have become corrupted. The consequences of improperly removing a USB device may be especially harmful with USB mass storage devices, since these devices may frequently be used to install operating system software or other critical firmware components on computer hardware. Data that was being transferred at the time of the interruption may potentially corrupt the critical computer system software, requiring extensive remediation.
It may therefore be desirable, among other things, to provide a more efficient method of transparently continuing USB device operations despite, for example, transient disconnecting and reconnecting of the USB device.